<?php

require_once 'app/funciones.php';
require_once 'app/Model.php';

// Incluye automáticamente los controladores que sean necesarios
function __autoload($nombre_clase) {
    require_once 'app/' . $nombre_clase . '.php';
} 

session_start();

// enrutamiento. Selecciona el controlador y la acción a ejecutar
$map = array(
    'inicio' => array('controller' => 'controlador', 'action' => 'inicio', 'privada' => false),
    'ver_anuncio' => array('controller' => 'controlador_anuncios', 'action' => 'ver_anuncio', 'privada' => false),
    'ver_banner' => array('controller' => 'controlador_anuncios', 'action' => 'ver_banner', 'privada' => false),
    'ver_cliente' => array('controller' => 'controlador_clientes', 'action' => 'ver_cliente', 'privada' => false),
    'ver_comercial' => array('controller' => 'controlador_comerciales', 'action' => 'ver_comercial', 'privada' => false),
    'ver_tarifa' => array('controller' => 'controlador_tarifas', 'action' => 'ver_tarifa', 'privada' => false),
    'ver_sitio' => array('controller' => 'controlador_sitios', 'action' => 'ver_sitio', 'privada' => false),
    'modificar_cliente' => array('controller' => 'controlador_clientes', 'action' => 'editar', 'privada' => false),
    'modificar_comercial' => array('controller' => 'controlador_comerciales', 'action' => 'editar', 'privada' => false),
    'modificar_anuncio' => array('controller' => 'controlador_anuncios', 'action' => 'editar', 'privada' => false),
    'activar_anuncio' => array('controller' => 'controlador_anuncios', 'action' => 'activar_anuncio', 'privada' => false),
    'desactivar_anuncio' => array('controller' => 'controlador_anuncios', 'action' => 'desactivar_anuncio', 'privada' => false),
    'modificar_tarifa' => array('controller' => 'controlador_tarifas', 'action' => 'editar', 'privada' => false),
    'modificar_sitio' => array('controller' => 'controlador_sitios', 'action' => 'editar', 'privada' => false),
    'modificar_perfil' => array('controller' => 'controlador', 'action' => 'modificar_peril', 'privada' => false),
    'desactivar_cliente' => array('controller' => 'controlador_clientes', 'action' => 'desactivar', 'privada' => false),
    'activar_cliente' => array('controller' => 'controlador_clientes', 'action' => 'activar', 'privada' => false),
    'desactivar_comercial' => array('controller' => 'controlador_comerciales', 'action' => 'desactivar', 'privada' => false),
    'activar_comercial' => array('controller' => 'controlador_comerciales', 'action' => 'activar', 'privada' => false),
    'desactivar_tarifa' => array('controller' => 'controlador_tarifas', 'action' => 'desactivar', 'privada' => false),
    'activar_tarifa' => array('controller' => 'controlador_tarifas', 'action' => 'activar', 'privada' => false),
    'comercial' => array('controller' => 'controlador_comerciales', 'action' => 'inicio_comercial', 'privada' => true),
    'registro_tarifa' => array('controller' => 'controlador_tarifas', 'action' => 'registrar', 'privada' => false),
    'cliente' => array('controller' => 'controlador_clientes', 'action' => 'inicio_cliente', 'privada' => true),
    'perfil' => array('controller' => 'controlador', 'action' => 'perfil', 'privada' => true),
    'administrador' => array('controller' => 'controlador_administradores', 'action' => 'inicio_administrador', 'privada' => true),
    'registro_anuncio' => array('controller' => 'controlador_anuncios', 'action' => 'registro_anuncio', 'privada' => false),
    'registro_comercial' => array('controller' => 'controlador_comerciales', 'action' => 'registrar', 'privada' => false),
    'registro_cliente' => array('controller' => 'controlador_clientes', 'action' => 'registrar', 'privada' => false),
    'registro_sitio' => array('controller' => 'controlador_sitios', 'action' => 'registrar', 'privada' => false),
    'login' => array('controller' => 'controlador', 'action' => 'login', 'privada' => false),
    'logout' => array('controller' => 'controlador', 'action' => 'logout', 'privada' => false),
    'contacto' => array('controller' => 'controlador_publico', 'action' => 'contacto', 'privada' => false),
    'comprobacion_email_existente' => array('controller' => 'controlador_usuarios', 'action' => 'comprobacion_email_existente', 'privada' => false),
    'comprobacion_nombre_usuario_existente' => array('controller' => 'controlador_usuarios', 'action' => 'comprobacion_nombre_usuario_existente', 'privada' => false),
    'listado_clientes' => array('controller' => 'controlador_clientes', 'action' => 'listado_clientes', 'privada' => false),
    'clientes_inactivos' => array('controller' => 'controlador_clientes', 'action' => 'listado_clientes_inactivos', 'privada' => false),
    'listado_tarifas' => array('controller' => 'controlador_tarifas', 'action' => 'listado_tarifas', 'privada' => false),
    'tarifas_inactivas' => array('controller' => 'controlador_tarifas', 'action' => 'listado_tarifas_inactivas', 'privada' => false),
    'listado_anuncios' => array('controller' => 'controlador_anuncios', 'action' => 'listado_anuncios', 'privada' => false),
    'historial_anuncios' => array('controller' => 'controlador_anuncios', 'action' => 'historial_anuncios', 'privada' => false),
    'listado_sitios' => array('controller' => 'controlador_sitios', 'action' => 'listado_sitios', 'privada' => false),
    'listado_comerciales' => array('controller' => 'controlador_comerciales', 'action' => 'listado_comerciales', 'privada' => false),
    'comerciales_inactivos' => array('controller' => 'controlador_comerciales', 'action' => 'listado_comerciales_inactivos', 'privada' => false),
    'eliminar_anuncio' => array('controller' => 'controlador_anuncios', 'action' => 'eliminar', 'privada' => false),
    'eliminar_sitio' => array('controller' => 'controlador_sitios', 'action' => 'eliminar', 'privada' => false),
    'cambiar_clave_cliente' => array('controller' => 'controlador_clientes', 'action' => 'cambiar_clave', 'privada' => false),
    'cambiar_clave_comercial' => array('controller' => 'controlador_comerciales', 'action' => 'cambiar_clave', 'privada' => false),
    'cambiar_clave_administrador' => array('controller' => 'controlador_administradores', 'action' => 'cambiar_clave', 'privada' => false),
    'modificar_imagen' => array('controller' => 'controlador_anuncios', 'action' => 'modificar_imagen', 'privada' => false),
    'update' => array('controller' => 'controlador_anuncios', 'action' => 'actualizar', 'privada' => false)
    
);

//Comprobamos si hay alguna accion que ejecutar, sino vamos a inicio
if (isset($_GET['action'])) {
    //Comprobamos que la acción existe en el mapa del enrutamiento, sino mostramos error 404
    if (isset($map[$_GET['action']])) {
        $action = $_GET['action'];
    } else {
        header('Status: 404 Not Found');
        echo '<html><body><h1>Error 404: No existe la ruta " ' . $_GET['action'] . ' ". </h1></body></html>';
        exit;
    }
} else {
    $action = 'inicio';
}

// Comprobamos si el usuario esta logeado y si la página es privada
if ($map[$action]['privada']) {
    //Si no existe la variable de sesión ni la cookie y no estamos ya en inicio redirigimos a inicio
    if (!isset($_SESSION['weokey_publicidad_usuario']) && !isset($_COOKIE['weokey_publicidad_usuario']) && $action != 'inicio') {
        header('location:inicio_login');
        die();
    }

    //Si existe la cookie pero no la sesión, creamos la sesión
    if (!isset($_SESSION['weokey_publicidad_usuario']) && isset($_COOKIE['weokey_publicidad_usuario'])) {
        //compruebo si la cookie coincide con algón usuario
        $obj_usuario = new Usuario();
        if ($email_usuario === $obj_usuario->comprobar_cookie($_COOKIE['weokey_publicidad_usuario'])) {
            //Creo la sesión
            $_SESSION['weokey_publicidad_usuario'] = md5($email_usuario);
            $obj_usuario->get($email_usuario);
            //$_SESSION['weokey_publicidad_nombre'] = $obj_usuario->usuario;
            //$_SESSION['weokey_publicidad_nombre'] = $obj_usuario->imagen;
        }
    }
}

//Si estamos en inicio y ya estamos logueados (existe la sesión) redirigimos a listar contactos
/*if ($action == 'inicio' && isset($_SESSION['weokey_publicidad_usuario'])) {
    header('location:inicio');
    die();
}*/

// La variable controlador contiene la clase del controlador a ejecutar y el método de dicha clase.
$controlador = $map [$action];

// Guardamos en variables el nombre de la clase controladora y del método que queremos ejecutar dentro de dicha clase
$clase_controlador = $controlador ['controller'];
$metodo = $controlador ['action'];

// Creamos un objeto de la clase controladora y ejecutamos el método indicado en el action
$obj_controlador = new $clase_controlador ();
$obj_controlador->$metodo();
?>
